在預設中,Sequelize 會自動增加2 個欄位「createdAt」和「updatedAt」在model中。這2個欄位資料型態是用 DataTypes.DATE , 覺的它很雞婆的就在下方按讚。
為什麼說它很雞婆呢?首先先說他原本的用意,他是想說每次新增資料時,一定會有一個欄位是叫建立時間的,那麼他就幫你自動加上這個欄位,你就不用再定義這個欄位了,他幫你安排好,讓你不用多建欄位,他是這個好意。
那麼更新資料時,一定會有一個更新的時間,他也幫你自動建立好,那你就不用額外再去定義一個更新時間的資料欄位,他是好意。
他是好意,沒錯,但卻造成了我的困擾。
為什麼造成了我的困擾,原因有2點:
1、並不是所有的資料表都一定要有建立時間、更新時間這二個欄位
2、若要有建立時間、更新時間,但我並不是要你這種名稱「createdAt」,我可能要的是這種的「create_at」或是「at_create」或是「create_date」,當我所有的資料欄位型態都是沒有大寫出現的,突然你給我自動加上這種欄位名稱有大寫的,是不是很破壞我的整理設計?
那麼如何關掉自動加上這2個欄位呢?它也是有方法的
sequelize.define('User', {
// ... (attributes)
}, {
timestamps: false
});
timestamps: false 設定成false,它就不會自動加上這2個欄位了
當然你不想要updatedAt的名稱,可不可以自定義?可以
class Foo extends Model {}
Foo.init({ /* attributes */ }, {
sequelize,
// don't forget to enable timestamps!
timestamps: true,
// 我不想要 createdAt 這個欄位
createdAt: false,
// 我想要 updatedAt 這個欄位,但我希望它的名稱是叫「updateTimestamp」
updatedAt: 'updateTimestamp'
});
但是在實務上,我在做define的過程中,所有的資料表都要額外去定義
timestamps: false,
所以我稱它為雞婆,多此一舉。
其實前幾節也有談到自動為資料表加上複數(s)的事,也是一樣
我都要額外去加上
freezeTableName: true,
意思就是禁止自動為資料表加上複數(s)
想對外分享這則貼文嗎?運用網址更方便呦~